package com.pond.pond.service.impl;

import com.pond.common.core.utils.DateUtils;
import com.pond.pond.domain.UpdateLog;
import com.pond.pond.domain.dto.UpdateLogRequest;
import com.pond.pond.mapper.UpdateLogMapper;
import com.pond.pond.service.IUpdateLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * 更新日志Service业务层处理
 */
@Service
public class UpdateLogServiceImpl implements IUpdateLogService {
    
    @Autowired
    private UpdateLogMapper updateLogMapper;

    /**
     * 查询更新日志
     *
     * @param id 更新日志主键
     * @return 更新日志
     */
    @Override
    public UpdateLog selectUpdateLogById(Long id) {
        return updateLogMapper.selectUpdateLogById(id);
    }

    /**
     * 查询更新日志列表
     *
     * @param updateLog 更新日志
     * @return 更新日志
     */
    @Override
    public List<UpdateLog> selectUpdateLogList(UpdateLog updateLog) {
        return updateLogMapper.selectUpdateLogList(updateLog);
    }

    /**
     * 新增更新日志
     *
     * @param updateLog 更新日志
     * @return 结果
     */
    @Override
    public int insertUpdateLog(UpdateLog updateLog) {
        updateLog.setCreateTime(DateUtils.getNowDate());
        return updateLogMapper.insertUpdateLog(updateLog);
    }

    /**
     * 修改更新日志
     *
     * @param updateLog 更新日志
     * @return 结果
     */
    @Override
    public int updateUpdateLog(UpdateLog updateLog) {
        updateLog.setUpdateTime(DateUtils.getNowDate());
        return updateLogMapper.updateUpdateLog(updateLog);
    }

    /**
     * 批量删除更新日志
     *
     * @param ids 需要删除的更新日志主键
     * @return 结果
     */
    @Override
    public int deleteUpdateLogByIds(Long[] ids) {
        return updateLogMapper.deleteUpdateLogByIds(ids);
    }

    /**
     * 删除更新日志信息
     *
     * @param id 更新日志主键
     * @return 结果
     */
    @Override
    public int deleteUpdateLogById(Long id) {
        return updateLogMapper.deleteUpdateLogById(id);
    }

    /**
     * 记录更新日志
     *
     * @param request 更新日志请求
     * @param ipAddress IP地址
     * @param userAgent 用户代理
     * @return 日志ID
     */
    @Override
    public Long recordUpdateLog(UpdateLogRequest request, String ipAddress, String userAgent) {
        UpdateLog updateLog = new UpdateLog();
        updateLog.setDeviceId(request.getDeviceId());
        updateLog.setCurrentVersion(request.getCurrentVersion());
        updateLog.setTargetVersion(request.getTargetVersion());
        updateLog.setUpdateStatus(request.getUpdateStatus());
        updateLog.setErrorMessage(request.getErrorMessage());
        updateLog.setIpAddress(ipAddress);
        updateLog.setUserAgent(userAgent);
        updateLog.setCreateTime(DateUtils.getNowDate());
        
        updateLogMapper.insertUpdateLog(updateLog);
        return updateLog.getId();
    }

    /**
     * 查询版本分布统计
     *
     * @return 统计结果
     */
    @Override
    public List<Map<String, Object>> getVersionDistribution() {
        return updateLogMapper.selectVersionDistribution();
    }

    /**
     * 查询更新成功率统计
     *
     * @return 统计结果
     */
    @Override
    public Map<String, Object> getUpdateSuccessRate() {
        return updateLogMapper.selectUpdateSuccessRate();
    }

    /**
     * 查询设备更新轨迹
     *
     * @param deviceId 设备ID
     * @return 更新轨迹
     */
    @Override
    public List<UpdateLog> getDeviceUpdateHistory(String deviceId) {
        return updateLogMapper.selectDeviceUpdateHistory(deviceId);
    }
}